/**
 * 
 */
package com.local.jodatime.jodabase;

import java.util.Locale;

import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Hours;
import org.joda.time.LocalDate;
import org.joda.time.Minutes;
import org.joda.time.Period;
import org.joda.time.Seconds;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

/**
 * @author ganhx
 *
 */
public class JodaBase {
    /**
     * 创建时间对象
     */
	public static void createTime() {
		DateTime datetime = new DateTime(2016,12,31,18,59,00);
		System.out.println("指定日期:"+datetime.toString("yyyy年MM月dd日 hh时mm分ss秒"));
		datetime = new DateTime();
		System.out.println("系统当前日期:"+datetime.toString("yyyy年MM月dd日 hh时mm分ss秒 EE"));
	}
	

	
	/**
	 * 日期格式转换
	 */
	public static void dateFormat() {
		DateTimeFormatter format = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss");    
        //时间解析  
        DateTime dateTime = DateTime.parse("2016-12-21 23:59:59", format);
        //格式化带Locale，输出==> 2012年12月21日 23:22:45 星期五  
        String string_c = dateTime.toString("时间格式转换:"+"yyyy年MM月dd日 HH时mm分ss秒 EE",Locale.CHINESE);  
        System.out.println(string_c);  
	}
	/**
	 * 获取每天的零点
	 */
	public static void getCurrentZeroTime(){
		DateTime dt=new DateTime().withMillisOfDay(0);
		System.out.println("每天零点:"+dt.toString("yyyy-MM-dd HH:mm:ss"));
	}
	

	
	/**
	 * 获取本周第某某天的时间，范围1~7
	 */
	public static void getDefineTimeOfWeek(){
		DateTime ti = new DateTime().withDayOfWeek(7);
		System.out.println("本月第7天(周日):"+ti.toString("yyyy-MM-dd HH:mm:ss"));//输出本月第7天(周日)的当前时间
	}
	
	/**
	 * 获取本月第某某天的时间，范围1~31
	 */
	public static void getDefineTimeOfMonth(){
		DateTime ti = new DateTime().withDayOfMonth(30);
		System.out.println("本月第30天:"+ti.toString("yyyy-MM-dd HH:mm:ss"));//输出本月第30天的当前时间
	}
	
	/**
	 * 获取本年度第某某天的时间，范围1~366
	 */
	public static void getDefineTimeOfYear(){
		DateTime ti = new DateTime().withDayOfYear(365);
		System.out.println("本年第365天:"+ti.toString("yyyy-MM-dd HH:mm:ss"));//输出本年第365天的当前时间
	}
	
	/**
	 * 在每天的几点几时几分几秒处理一些东西,无指定的项默认当前
	 */
	public static void getDefineTime(){
		DateTime dt = new DateTime().withYear(2017).withHourOfDay(15).withMinuteOfHour(30).withSecondOfMinute(59);
		System.out.println("自定义时间:"+dt.toString("yyyy-MM-dd HH:mm:ss"));//结果2016-09-09 06:30:00
	}
	
	
	/**
	 * 获取本月最初与最末
	 */
	public static void getFirstAndLast(){
		DateTime dateTime=new DateTime();
		System.out.println("本月月初："+dateTime.dayOfMonth().withMinimumValue().dayOfMonth().get());//输出1
		System.out.println("本月月底："+dateTime.dayOfMonth().withMaximumValue().dayOfMonth().get());//输出本月的最后一天
	}
	

	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		createTime();
		dateFormat();
		getCurrentZeroTime();
		getDefineTimeOfWeek();
		getDefineTimeOfMonth();
		getDefineTimeOfYear();
		getDefineTime();
		getFirstAndLast();
	}

}
